package tools.old.files;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.sql.*;
import java.math.*;

import javax.swing.JOptionPane;
import javax.swing.JPasswordField;

import dao.account.DataLayerAccount;
import account.model.Account;
import account.view.InloggenView;
import tools.language.MentionAccounts;
import tools.mail.Mail;

public class RegistrerenModel {
	private static RegistrerenModel instance;
	private static DataLayerAccount dl = new DataLayerAccount();
	private static Mail m = new Mail();
	private static int Typenummer;
	
	public ArrayList<Account> account = new ArrayList<>();

	RegistrerenView rv = RegistrerenView.getInstance();
	
	public static RegistrerenModel getInstance() {

		if (instance == null) {
			instance = new RegistrerenModel();
		}
		return instance;
	}

	// toevoegen van student
	public void registreerAccount(Account a) {
		dl.openConn();
//		dl.insertAccounts(a);
		dl.closeConn();
	}
	
	// bericht versturen naar user & admin
	public void mailVerzenden(Account b) {
//		m.RegisterUserMail(b);
//		m.RegisterAdminMail(b);
	}

	// checken student of docent

	public int checkType() {
		RegistrerenView rw = RegistrerenView.getInstance();

		if (rw.DocentRDB.isSelected()) {

			rw.AfkortingTF.setEnabled(true);
			rw.AfkortingTF.setEditable(true);
			rw.MentorklasCB.setEnabled(true);

			rw.OvnummerTF.setEditable(false);
			rw.KlasCB.setEnabled(false);
			rw.OvnummerTF.setEnabled(false);
			Typenummer = 2;
		}

		if (rw.StudentRDB.isSelected()) {

			rw.OvnummerTF.setEditable(true);
			rw.KlasCB.setEnabled(true);
			rw.OvnummerTF.setEnabled(true);

			rw.AfkortingTF.setEnabled(false);
			rw.AfkortingTF.setEditable(false);
			rw.MentorklasCB.setEnabled(false);
			Typenummer = 1;
		}

		return Typenummer;
	}

	// reset knop,clearen van alle velden en comboboxen
	public void reset() {

		//RegistrerenView rv = RegistrerenView.getInstance();
		rv.bg.clearSelection();
		rv.VoornaamTF.setText("");
		rv.AchternaamTF.setText("");
		rv.EmailTF.setText("");
		rv.GebruikersnaamTF.setText("");
		rv.passwordField.setText("");
		rv.OvnummerTF.setText("");
		rv.VoornaamTF.setText("");
		rv.AfkortingTF.setText("");

		rv.AfkortingTF.setEnabled(false);
		rv.AfkortingTF.setEditable(false);
		rv.MentorklasCB.setEnabled(false);

		rv.OvnummerTF.setEditable(false);
		rv.KlasCB.setEnabled(false);
		rv.OvnummerTF.setEnabled(false);
		/*
		 * De reset is gemaakt, ik heb de removeitems() verwijderd. Setenabled en seteditable hierboven heb ik false gezet, waardoor 
		 * de student en docent weer eerst vereist worden te kiezen wat ze zijn. -vera
		 */
	}

	public boolean registreren() {
		String voornaam = RegistrerenView.getInstance().getVoornaamTF()
				.getText();
		String achternaam = RegistrerenView.getInstance().getAchternaamTF()
				.getText();
		String email = RegistrerenView.getInstance().getEmailTF().getText();
		
		
		String gebruikersnaam = RegistrerenView.getInstance()
				.getGebruikersnaamTF().getText();

		char[] wachtwoord = RegistrerenView.getInstance().getPasswordField()
				.getPassword();


		String wwString = new String(wachtwoord);
		if (RegistrerenView.getInstance().StudentRDB.isSelected()) {

			if(voornaam.equals("") || achternaam.equals("") || email.equals("") || gebruikersnaam.equals("") || wachtwoord.equals("")){
				MentionAccounts.getInstance().errorRegistreren();
			} else {
				Klas k= new Klas();

				Object klas = RegistrerenView.getInstance().getKlasCB()
						.getSelectedItem();
				String klas1 = klas.toString();

				int lengte = Klassenlijst.getInstance().getKlassen().size();

				for(int i=0; i < lengte;i++) {
					if(Klassenlijst.getInstance().getKlassen().get(i).getKlas_naam().equals(klas1)){
						k=Klassenlijst.getInstance().getKlassen().get(i);
					}
				}

				String ovnummer1 = RegistrerenView.getInstance().getOvnummerTF()
						.getText();
				int ovnummer = Integer.parseInt(ovnummer1);

//				Account accTijdelijk = new Account(voornaam, achternaam, email,
//						gebruikersnaam, wwString, ovnummer, k, null, null, ovnummer1);
//				RegistrerenModel.getInstance().registreerAccount(accTijdelijk);
				
				//mail versturen naar gebruiker met naam en wachtwoord
//				Account mail = new Account(email, voornaam, gebruikersnaam, wwString);
//				RegistrerenModel.getInstance().mailVerzenden(mail);

				//succes melding oproepen
				MentionAccounts.getInstance().succesRegistreren();
				rv.dispose();
			}
			return true; 
		}
		
		

		if (RegistrerenView.getInstance().DocentRDB.isSelected()) {
			if(voornaam.equals("") || achternaam.equals("") || email.equals("") || gebruikersnaam.equals("") || wachtwoord.equals("")){
				MentionAccounts.getInstance().errorRegistreren();
			} else {

				Object mentorklas = RegistrerenView.getInstance().getMentorklasCB()
						.getSelectedItem();
				String mentorklas1 = mentorklas.toString();
				String vakspecialiteit = RegistrerenView.getInstance()
						.getVakspecialiteitTF().getText();

//				Account accTijdelijk1 = new Account(voornaam, achternaam, email,
//						gebruikersnaam, wwString, 0, null, mentorklas1,
//						vakspecialiteit, vakspecialiteit);
//				RegistrerenModel.getInstance().registreerAccount(accTijdelijk1);
				
				//mail versturen naar gebruiker met naam en wachtwoord
//				Account mail = new Account(email, voornaam, gebruikersnaam, wwString);
//				RegistrerenModel.getInstance().mailVerzenden(mail);

				//succes melding oproepen
				MentionAccounts.getInstance().succesRegistreren();
				rv.dispose();
			}
			
			return true;

		}

		//error melding oproepen
		MentionAccounts.getInstance().errorRegistreren();

		return false;

	}

}